// 实现一个泛型 `DeepReadonly<T>`，它将对象的每个参数及其子对象递归地设为只读。

//判断是否函数
type IsFunction<T> = T extends (...args:any[])=>any ?true:false

//判断是否元组/数组
type IsArray<T> = T extends readonly any[] ?true :false

type DeepReadonly<T> =
    IsFunction<T> extends true
        ?T
        :IsArray<T> extends true
             ?{readonly [K in keyof T]: DeepReadonly<T[K]>}
             :T extends object
                ?{readonly [K in keyof T]:DeepReadonly<T[K]> }
                :T
